<?php
require_once (dirname(__FILE__)."/tenpayclasses/PayRequestHandler.class.php");
require_once (dirname(__FILE__)."/tenpayclasses/PayResponseHandler.class.php");
/**
 * ECSHOP 财付通插件
 * ============================================================================
 * 版权所有 2005-2010 上海商派网络科技有限公司，并保留所有权利。
 * 网站地址: http://www.ecshop.com；
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和
 * 使用；不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * $Author: liuhui $
 * $Id: tenpay.php 17063 2010-03-25 06:35:46Z liuhui $
 */

if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/tenpay.php';

if (file_exists($payment_lang))
{
    global $_LANG;

    include_once($payment_lang);
}

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php');

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'tenpay_desc';

    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '1';

    /* 作者 */
    $modules[$i]['author']  = 'ECSHOP TEAM';

    /* 网址 */
    $modules[$i]['website'] = 'http://www.tenpay.com';

    /* 版本号 */
    $modules[$i]['version'] = '2.0.0';

    /* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => 'tenpay_account',   'type' => 'text', 'value' => ''),
        array('name' => 'tenpay_key',       'type' => 'text', 'value' => ''),
        array('name' => 'magic_string',     'type' => 'text', 'value' => '')
    );

    return;
}

/**
 * 类
 */
class tenpay
{
    /**
     * 构造函数
     *
     * @access  public
     * @param
     *
     * @return void
     */
    function tenpay()
    {
    }

    function __construct()
    {
        $this->tenpay();
    }

    /**
     * 生成支付代码
     * @param   array    $order       订单信息
     * @param   array    $payment     支付方式信息
     */
    function get_code($order, $payment)
    {
    /* 商户号 */
$bargainor_id = $payment['tenpay_account'];

/* 密钥 */
$key = $payment['tenpay_key'];

/* 返回处理地址 */
$return_url =  return_url('tenpay');

//date_default_timezone_set(PRC);
$strDate = date("Ymd");
$strTime = date("His");

//4位随机数
$randNum = rand(1000, 9999);

//10位序列号,可以自行调整。
 
 

/* 商家订单号,长度若超过32位，取前32位。财付通只记录商家订单号，不保证唯一。 */
$sp_billno = $order['order_sn'];

/* 财付通交易单号，规则为：10位商户号+8位时间（YYYYmmdd)+10位流水号 */
$bill_no = str_pad($order['log_id'], 10, 0, STR_PAD_LEFT);
$today = date('Ymd');
$transaction_id = $payment['tenpay_account'].$today.$bill_no;

/* 商品价格（包含运费），以分为单位 */
$total_fee = floatval($order['order_amount']) * 100;

/* 商品名称 */
 /* 订单描述，用订单号替代 */
if (!empty($order['order_id']))
{
  //$desc = get_goods_name_by_id($order['order_id']);
  $desc = $order['order_sn'];
	$attach = '';
}
else
{
    $desc = $GLOBALS['_LANG']['account_voucher'];
    $attach = 'voucher';
}
/* 编码标准 */
if (!defined('EC_CHARSET') || EC_CHARSET == 'utf-8')
        {
            $desc = ecs_iconv('utf-8', 'gbk', $desc);
        }
//$desc = "订单号：" . $transaction_id;

/* 创建支付请求对象 */
$reqHandler = new PayRequestHandler();
$reqHandler->init();
$reqHandler->setKey($key);

//----------------------------------------
//设置支付参数
//----------------------------------------
$reqHandler->setParameter("bargainor_id", $bargainor_id);			//商户号
$reqHandler->setParameter("sp_billno", $sp_billno);					//商户订单号
$reqHandler->setParameter("transaction_id", $transaction_id);		//财付通交易单号
$reqHandler->setParameter("total_fee", $total_fee);					//商品总金额,以分为单位
$reqHandler->setParameter("return_url", $return_url);				//返回处理地址
$reqHandler->setParameter("desc", $desc);	//商品名称

//用户ip,测试环境时不要加这个ip参数，正式环境再加此参数
$reqHandler->setParameter("spbill_create_ip", $_SERVER['REMOTE_ADDR']);

//请求的URL
$reqUrl = $reqHandler->getRequestURL();
	
		/*总是跳转到登录窗口*/
$button  = '<a href="'.$reqUrl.'"><img src="'. $GLOBALS['ecs']->url() .'images/tenpay.gif"/></a>';

  return $button;
    }

    /**
     * 响应操作
     */
    function respond()
    {
    	 $payment    = get_payment('tenpay');
   		 $resHandler = new PayResponseHandler();
		$resHandler->setKey($payment['tenpay_key']);
		if($resHandler->isTenpaySign()) {
			$payment    = get_payment('tenpay');
			$transaction_id = $resHandler->getParameter("transaction_id");
			$total_fee = $resHandler->getParameter("total_fee");
			$pay_result = $resHandler->getParameter("pay_result");
			
			if( "0" == $pay_result ) {
				$sp_billno = $resHandler->getParameter("sp_billno");
				$log_id = get_order_id_by_sn($sp_billno);
				if (!check_money($log_id, $total_fee / 100))
        		{
            			 return false;
        		}
        	
        		order_paid($log_id);
        		return true;
			}else{
				return false;
			}
		}else{

			return false;
		}

    }
    function write_log($str)
    {
    	$fh = fopen('pay.log.txt','a+');
    	fwrite($fh,$str.'\n');
    	fclose($fh);
    }
}

?>